package app

import "gitee.com/liumou_site/tencent-cloud-ssl-automatic/module/AppStruct"

// SSL 结构体封装了与SSL证书相关的配置信息。
// 它包含了登录信息、域名信息和配置文件路径，用于管理和配置SSL证书。
type SSL struct {
	// Login 指向一个 LoginStruct 类型的指针，用于存储登录信息。
	// 这些登录信息可能包括用户名和密码等，是与SSL证书提供商进行交互所必需的。
	Login     *LoginStruct  `toml:"login,omitempty" json:"login"`          // 登录信息
	LoginList []LoginStruct `toml:"loginList,omitempty" json:"login_list"` // 登录信息列表

	// Domain 指向一个 Domain 类型的指针，用于存储域名相关信息。
	// 域名信息可能包括域名名称、域名所有者等，这些信息对于SSL证书的申请和管理至关重要。
	Domain *AppStruct.DomainConfig `toml:"domain,omitempty" json:"domain"` // 域名信息

	// LoginDir 用于指定配置文件的路径。
	// 这个配置文件可能包含了更多关于SSL证书的详细配置信息，如证书有效期、证书密钥等。
	LoginDir  string     `toml:"tf" json:"tf"`         // 登录配置文件路径
	DomainDir string     `toml:"domain_dir"`           // 域名配置文件夹路径
	Result    *SSLResult `toml:"result" json:"result"` // 结果
}

// LoginStruct 是用于登录的结构体，包含了登录所需的信息和配置
type LoginStruct struct {
	// Type 表示登录类型，例如："Password"、"SSH"等
	Type string `toml:"Type"`
	// SecretId 是用于登录的密钥ID，用于身份验证
	SecretId string `toml:"SecretId"`
	// SecretKey 是与SecretId对应的密钥，用于身份验证
	SecretKey string `toml:"SecretKey"`
	// Name 是登录名称，通常用于标识用户或服务
	Name string `toml:"Name"`
	// Auth 是认证信息，可能包含token或其他认证所需的数据
	Auth string `toml:"auth"`
	// Enable 表示是否启用该登录方式
	Enable bool `toml:"Enable"`
}

//// Domain 结构体定义了与域名相关的信息，用于处理域名的证书申请和管理。
//type Domain struct {
//	Name                string `toml:"name"`                   // 域名名称
//	DvAuthMethod        string `toml:"dv_auth_method"`         // 域名所有权验证方式,默认: DNS_AUTO
//	Email               string `toml:"email"`                  // 邮箱
//	CsrEncryptAlgo      string `toml:"csr_encrypt_algo"`       // 密钥加密算法
//	CsrKeyParameter     string `toml:"csr_key_parameter"`      // 密钥参数
//	Alias               string `toml:"alias"`                  // 备注信息
//	OldCertificateId    string `toml:"old_certificate_id"`     // 原证书 ID，用于重新申请
//	DeleteDnsAutoRecord bool   `toml:"delete_dns_auto_record"` // 是否删除自动添加的 DNS 解析记录
//}

type SSLResult struct {
	// CertId 证书ID
	TotalCount string `json:"totalCount"` // 证书总数

}

type Response struct {
	Certificates []Certificate `json:"Certificates"`
	RequestId    string        `json:"RequestId"`
	TotalCount   int           `json:"TotalCount"`
}

type Certificate struct {
	Alias               string           `json:"Alias"`
	BoundResource       []interface{}    `json:"BoundResource"`
	CertBeginTime       string           `json:"CertBeginTime"`
	CertEndTime         string           `json:"CertEndTime"`
	CertificateExtra    CertificateExtra `json:"CertificateExtra"`
	CertificateId       string           `json:"CertificateId"`
	CertificateType     string           `json:"CertificateType"`
	Deployable          bool             `json:"Deployable"`
	Domain              string           `json:"Domain"`
	From                string           `json:"From"`
	InsertTime          string           `json:"InsertTime"`
	IsDv                bool             `json:"IsDv"`
	IsVip               bool             `json:"IsVip"`
	IsVulnerability     bool             `json:"IsVulnerability"`
	IsWildcard          bool             `json:"IsWildcard"`
	OwnerUin            string           `json:"OwnerUin"`
	PackageType         string           `json:"PackageType"`
	PackageTypeName     string           `json:"PackageTypeName"`
	ProductZhName       string           `json:"ProductZhName"`
	ProjectId           string           `json:"ProjectId"`
	ProjectInfo         ProjectInfo      `json:"ProjectInfo"`
	RenewAble           bool             `json:"RenewAble"`
	Status              int              `json:"Status"`
	StatusMsg           *string          `json:"StatusMsg"`
	StatusName          string           `json:"StatusName"`
	SubjectAltName      *string          `json:"SubjectAltName"`
	Tags                []Tag            `json:"Tags"`
	ValidityPeriod      string           `json:"ValidityPeriod"`
	VerifyType          string           `json:"VerifyType"`
	VulnerabilityStatus string           `json:"VulnerabilityStatus"`
}

type CertificateExtra struct {
	DomainNumber        *int    `json:"DomainNumber"`
	OriginCertificateId *string `json:"OriginCertificateId"`
	RenewOrder          *string `json:"RenewOrder"`
	ReplacedBy          *string `json:"ReplacedBy"`
	ReplacedFor         string  `json:"ReplacedFor"`
}

type ProjectInfo struct {
	OwnerUin          int    `json:"OwnerUin"`
	ProjectCreateTime string `json:"ProjectCreateTime"`
	ProjectCreatorUin int    `json:"ProjectCreatorUin"`
	ProjectId         string `json:"ProjectId"`
	ProjectName       string `json:"ProjectName"`
	ProjectResume     string `json:"ProjectResume"`
}

type Tag struct {
	TagKey   string `json:"TagKey"`
	TagValue string `json:"TagValue"`
}
